package com.minglead.crawler.util;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.minglead.crawler.base.ActionResult;
import com.minglead.crawler.constant.MsgCode;
import com.minglead.crawler.vo.PageListVO;
import com.minglead.crawler.vo.PaginationVO;
import lombok.extern.slf4j.Slf4j;


/**
 * 页码转换工具
 * 因为前端需要的入参跟 出参等，跟service 层不同，通过这个工具转换，避免类的设计穿通的servcie层，减低耦合
 * @date 2024-06-21
 * @author clz
 */
@Slf4j
public class PageUtils {

	/**
	 * 创建一个 servcie层需要的Page 对象
	 * @param currentPage
	 * @param pageSize
	 * @return
	 */
	public static Page getPage(Long currentPage, Long pageSize) {
		if (currentPage == null && pageSize == null) {
			return null;
		} else {
			currentPage = currentPage == null ? 1 : currentPage;
			pageSize = pageSize == null ? 25 : pageSize;
			if (currentPage < 1) {
				currentPage = 1l;
			}

			if (pageSize < 1) {
				pageSize = 25l;
			}

			return new Page(currentPage,pageSize);
		}
	}


	/**
	 * 转换为这个框架前端需要的格式(json数据)
	 * @param iPage
	 */
	public static <T> ActionResult convertPage(IPage<T> iPage) {

		ActionResult jsonData = new ActionResult<>();
		PageListVO<T> vo = new PageListVO<>();
		vo.setList(iPage.getRecords());
		vo.setPagination(new PaginationVO(iPage.getCurrent(), iPage.getSize(), iPage.getTotal()));
		jsonData.setData(vo);
		jsonData.setCode(200);
		jsonData.setMsg(MsgCode.SU000.get());
		return jsonData;

	}

	/**
	 * 将pageListVO类型的转回IPage类型
	 * 用于把IPage封到ActionResult里面的东西转换回来，临时方法...
	 * @param pageListVO
	 * @return
	 * @param <T>
	 */
	public static <T> IPage<T> pageListVOToIPage(PageListVO<T> pageListVO) {
		Page<T> page = new Page<>();
		PaginationVO pagination = pageListVO.getPagination();
		page.setCurrent(pagination.getCurrentPage());
		page.setSize(pagination.getPageSize());
		page.setTotal(pagination.getTotal());
		page.setRecords(pageListVO.getList());
		return page;
	}
}
